package cn.tedu.mall.front.controller;

import cn.tedu.mall.common.restful.JsonPage;
import cn.tedu.mall.common.restful.JsonResult;
import cn.tedu.mall.front.service.IFrontAttributeService;
import cn.tedu.mall.front.service.IFrontSpuService;
import cn.tedu.mall.pojo.product.vo.AttributeStandardVO;
import cn.tedu.mall.pojo.product.vo.SpuListItemVO;
import cn.tedu.mall.pojo.product.vo.SpuStandardVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class FrontSpuController {
    @Autowired
    private IFrontSpuService spuService;
    /**
     * 更具cartegoryId查询 spu列表
     */
    @GetMapping("/front/spu/list/{categoryId}")
    public JsonResult<JsonPage<SpuListItemVO>> listCatsSpus(
             @PathVariable("categoryId") Long categoryId,
             Integer page,
             Integer pageSize){
        JsonPage<SpuListItemVO> jsonPage = spuService.listSpuByCategoryId(categoryId, page, pageSize);
        return JsonResult.ok(jsonPage);
    }
    /**
     * 利用spuId 查询spu相关属性数据
     */
    @GetMapping("/front/spu/{id}")
    public JsonResult<SpuStandardVO> getSpu(
            @PathVariable(name="id") Long spuId){
        SpuStandardVO spuStandardVO=spuService.getFrontSpuById(spuId);
        return JsonResult.ok(spuStandardVO);
    }
    @Autowired
    private IFrontAttributeService attributeService;
    @GetMapping("/front/spu/template/{spuId}")
    public JsonResult<List<AttributeStandardVO>> getAllAttributes(
            @PathVariable("spuId") Long spuId){
        //controller允不允许写业务逻辑??? 更具业务确定
        //一般规则,确实不允许,只能负责和前端交互的数据
        //例如 前端提交的DTO param可以在复杂业务中 在控制成进行拆分,组织成新的BO对象
        //传递给业务层,
        //例如 可以处理一些简单的和request response数据(输出的是文件数据流)
        List<AttributeStandardVO> attributeStandardVOS
                = attributeService.getSpuAttributesBySpuId(spuId);
        return JsonResult.ok(attributeStandardVOS);
    }
}
